package com.dwy2002.course.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dwy2002.common.Result;
import com.dwy2002.pojo.dto.courses.CoursesDTO;
import com.dwy2002.pojo.dto.courses.CoursesPageDTO;
import com.dwy2002.pojo.po.courses.Courses;
import com.dwy2002.pojo.vo.courses.CoursesVO;

import java.util.List;

/**
 * @author 杜伟毅
 * @version 1.0
 * @since 2025/01/20
 */
public interface ICoursesService extends IService<Courses> {
    /**
     * 创建课程
     *
     * @param courses 从前端接收的创建课程信息
     * @author 杜伟毅
     * @since 2025/1/21 0021 0:02
     */
    Result<Void> insertCourses(CoursesDTO courses);

    /**
     * 删除课程（支持单个删除和批量删除）
     *
     * @param coursesId 课程ID
     * @author 杜伟毅
     * @since 2025/2/7 0007 21:22
     */
    Result<Void> deleteListCourses(List<String> coursesId);

    /**
     * 分页查询
     * <p>
     * 查询：可按标题搜索
     * <p>
     * 排序：可按课程开始时间、课程创建时间、课程修改时间、课程费用进行升序和降序排序
     * <p>
     * 分类：可按课程状态进行分类。
     *
     * @param coursesPageData 课程类的分页数据类
     * @author 杜伟毅
     * @since 2025/1/20 0020 23:45
     */
    Result<Page<Courses>> getCoursesPage(CoursesPageDTO coursesPageData);

    /**
     * 修改课程
     *
     * @param courses 从前端接收的修改课程信息
     * @author 杜伟毅
     * @since 2025/1/21 0021 0:04
     */
    Result<Void> updateCourses(CoursesDTO courses);

    /**
     * 报名课程
     *
     * @param id 课程的ID
     * @author 杜伟毅
     * @since 2025/1/22 0022 23:32
     */
    Result<Void> joinCourse(String id);

    /**
     * 取消报名课程
     *
     * @param id 课程的ID
     * @author 杜伟毅
     * @since 2025/1/22 0022 23:33
     */
    Result<Void> leaveCourse(String id);

    /**
     * 获取课程详情
     *
     * @param id 课程的ID
     * @author 杜伟毅
     * @since 2025/1/24 0024 17:51
     */
    Result<CoursesVO> getCourseDetails(String id);
}
